package main

import "fmt"

func main() {
	s1 := make([]int, 5, 10)
	fmt.Println(s1)
	fmt.Printf("s1:%v\tlen(s1):%d\tcap(s1):%d \n", s1, len(s1), cap(s1))

	s2 := make([]int, 0, 10)
	fmt.Println(s2)
	fmt.Printf("s2:%v\tlen(s2):%d\tcap(s2):%d \n", s2, len(s2), cap(s2))

	/* 	切片就是一个框，框住了一块联系的内存，
	   	属于引用类型，真正的数据都是保存在底层数组里的 */
	/* 		   切片之间是不能比较的，我们不能使用==操作符来判断两个切片是否含有全部相等元素。
	   		   切片唯一合法的比较操作是和nil比较。 一个nil值的切片并没有底层数组，
	   		   一个nil值的切片的长度和容量都是0。
	   		   但是我们不能说一个长度和容量都是0的切片一定是nil，例如下面的示例： */
	//所以要判断一个切片是否是空的，要是用len(s) == 0来判断，不应该使用s == nil来判断。

	//切片的赋值
	s3 := []int{1, 3, 5}
	s4 := s3 //s3也是切片，s3和s4都指向了同一个底层数组
	fmt.Println(s3, s4)
	fmt.Println("修改s3切片后：")
	s3[0] = 1000
	fmt.Println(s3, s4)
	fmt.Println("修改s4切片后：")
	s4[1] = 200
	fmt.Println(s3, s4)
	//切片的遍历
	//1.索引遍历
	fmt.Println("索引遍历：")
	for i := 0; i < len(s3); i++ {
		fmt.Println(i, s3[i])
	}

	//2.for range循环
	fmt.Println("for range循环：")
	for i, v := range s3 {
		fmt.Println(i, v)
	}
}
